home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM A / PD-ROM A.iso / HyperCard / Education / Triangles / stack.txt < prev   
Encoding:
Text File  |  1991-10-27  |  14.8 KB  |  528 lines

  1. -- stack: in
  2. -- format: 8 (HyperCard 1)
  3. -- flags: 0x5000 (can't delete)
  4. -- protect password hash: 0
  5. -- maximum user level: 5 (scripting)
  6. -- window: Rect(x1=0, y1=0, x2=0, y2=0)
  7. -- screen: Rect(x1=0, y1=0, x2=0, y2=0)
  8. -- card dimensions: w=0 h=0
  9. -- scroll: x=0 y=0
  10. -- background count: 1
  11. -- first background id: 3139
  12. -- card count: 5
  13. -- first card id: 4735
  14. -- list block id: 3646
  15. -- print block id: 0
  16. -- font table block id: 0
  17. -- style table block id: 0
  18. -- free block count: 3
  19. -- free size: 15840 bytes
  20. -- total size: 81920 bytes
  21. -- stack block size: 13824 bytes
  22. -- created by hypercard version: 0x01258000
  23. -- compacted by hypercard version: 0x01258000
  24. -- modified by hypercard version: 0x01258000
  25. -- opened by hypercard version: 0x01258000
  26. -- patterns[0]: 0x0000000000000000
  27. -- patterns[1]: 0x8000000008000000
  28. -- patterns[2]: 0x8800220088002200
  29. -- patterns[3]: 0x8888222288882222
  30. -- patterns[4]: 0x88AA22AA88AA22AA
  31. -- patterns[5]: 0xCCAA33AACCAA33AA
  32. -- patterns[6]: 0xEEAABBAAEEAABBAA
  33. -- patterns[7]: 0xEEBBBBEEEEBBBBEE
  34. -- patterns[8]: 0xFFBBFFEEFFBBFFEE
  35. -- patterns[9]: 0xFFBBFFFFFFBBFFFF
  36. -- patterns[10]: 0x8010022001084004
  37. -- patterns[11]: 0xFFFFFFFFFFFFFFFF
  38. -- patterns[12]: 0x8822882288228822
  39. -- patterns[13]: 0x1122448811224488
  40. -- patterns[14]: 0xC4800C6843023026
  41. -- patterns[15]: 0xB130031BD8C00C8D
  42. -- patterns[16]: 0xAA00AA00AA00AA00
  43. -- patterns[17]: 0x8822552288225522
  44. -- patterns[18]: 0x8855225588552255
  45. -- patterns[19]: 0x77DD77DD77DD77DD
  46. -- patterns[20]: 0x8000000000000000
  47. -- patterns[21]: 0xAA55AA55AA55AA55
  48. -- patterns[22]: 0x038448300C020101
  49. -- patterns[23]: 0x8244394482010101
  50. -- patterns[24]: 0x8814224188412214
  51. -- patterns[25]: 0x8080413E080814E3
  52. -- patterns[26]: 0x22048C7422179810
  53. -- patterns[27]: 0xBE808808EB088880
  54. -- patterns[28]: 0x25C8328964244C92
  55. -- patterns[29]: 0xA29C41BE2AC914EB
  56. -- patterns[30]: 0x40A00000040A0000
  57. -- patterns[31]: 0x8040200002040800
  58. -- patterns[32]: 0xAA00800088008000
  59. -- patterns[33]: 0xFF80808080808080
  60. -- patterns[34]: 0x081C22C180010204
  61. -- patterns[35]: 0xFF808080FF080808
  62. -- patterns[36]: 0xF87422478F172271
  63. -- patterns[37]: 0xBF00BFBFB0B0B0B0
  64. -- patterns[38]: 0xFF7FBE5DA2418000
  65. -- patterns[39]: 0xFAF5FAF5A050A050
  66. -- checksum: 0x0
  67. ----- HyperTalk script -----
  68. --SIN LAW
  69. on sasb -- find sa from sb
  70.   global aa,ab,ac,sa,sb,sc
  71.   put sb*sin(pi*aa/180)/sin(pi*ab/180) into sa
  72. end sasb
  73. on sasc -- find sa from sc
  74.   global aa,ab,ac,sa,sb,sc
  75.   put sc*sin(pi*aa/180)/sin(pi*ac/180) into sa
  76. end sasc
  77. on sbsa  -- find sb from sa
  78.   global aa,ab,ac,sa,sb,sc
  79.   put sa*sin(pi*ab/180)/sin(pi*aa/180) into sb
  80. end sbsa
  81. on sbsc  -- find sb from sc
  82.   global aa,ab,ac,sa,sb,sc
  83.   put sc*sin(pi*ab/180)/sin(pi*ac/180) into sb
  84. end sbsc
  85. on scsa -- find sc from sa
  86.   global aa,ab,ac,sa,sb,sc
  87.   put sa*sin(pi*ac/180)/sin(pi*aa/180) into sc
  88. end scsa
  89. on scsb --find sc from sb
  90.   global aa,ab,ac,sa,sb,sc
  91.   put sb*sin(pi*ac/180)/sin(pi*ab/180) into sc
  92. end scsb
  93.  
  94. --COS LAW
  95. on aasides -- find aa from all sides
  96.   global aa,ab,ac,sa,sb,sc
  97.   put ((sb^2)+(sc^2)-(sa^2))/(2*sb*sc) into cosa
  98.   put sqrt(1-cosa^2) into sina
  99.   put (180/pi)*atan(sina/cosa) into aa
  100.   if aa<0 then put 180+aa into aa
  101. end aasides
  102. on absides -- find ab from all sides
  103.   global aa,ab,ac,sa,sb,sc
  104.   put ((sa^2)+(sc^2)-(sb^2))/(2*sa*sc) into cosb
  105.   put sqrt(1-cosb^2) into sinb
  106.   put (180/pi)*atan(sinb/cosb) into ab
  107.   if ab<0 then put 180+ab into ab
  108. end absides
  109. on acsides -- find ac from sides
  110.   global aa,ab,ac,sa,sb,sc
  111.   put ((sa^2)+(sb^2)-(sc^2))/(2*sa*sb) into cosc
  112.   put sqrt(1-cosc^2) into sinc
  113.   put (180/pi)*atan(sinc/cosc) into ac
  114.   if ac<0 then put 180+ac into ac
  115. end acsides
  116. on saaa -- find sa from 2 sides and enclosed angle aa
  117.   global aa,ab,ac,sa,sb,sc
  118.   put sqrt((sb^2)+(sc^2)-(2*sb*sc*cos(pi*aa/180))) into sa
  119. end saaa
  120. on sbab -- find sb from 2 sides and enclosed angle ab
  121.   global aa,ab,ac,sa,sb,sc
  122.   put sqrt((sa^2)+(sc^2)-(2*sa*sc*cos(pi*ab/180))) into sb
  123. end sbab
  124. on scac -- find sc from 2 sides and enclosed angle ac
  125.   global aa,ab,ac,sa,sb,sc
  126.   put sqrt((sa^2)+(sb^2)-(2*sa*sb*cos(pi*ac/180))) into sc
  127. end scac
  128. on scaa -- find sc from sides sa,sb and angle aa  (2 Solutions)
  129.   global aa,ab,ac,sa,sb,sc,ktemp,kk
  130.   put (sb*cos(pi*aa/180))+(sqrt(((sb*cos(pi*aa/180))^2)-(sb^2)+(sa^2))) into sc
  131.   put (sb*cos(pi*aa/180))-(sqrt(((sb*cos(pi*aa/180))^2)-(sb^2)+(sa^2))) into ktemp
  132.   if ktemp > 0 then put 1 into kk
  133. end scaa
  134. on saab -- find sa from sides sb,sc and angle ab  (2 Solutions)
  135.   global aa,ab,ac,sa,sb,sc,ktemp,kk
  136.   put (sc*cos(pi*ab/180))+(sqrt(((sc*cos(pi*ab/180))^2)-(sc^2)+(sb^2))) into sa
  137.   put (sc*cos(pi*ab/180))-(sqrt(((sc*cos(pi*ab/180))^2)-(sc^2)+(sb^2))) into ktemp
  138.   if ktemp > 0 then put 1 into kk
  139. end saab
  140. on sbac -- find sb from sides sc,sa and angle ac  (2 Solutions)
  141.   global aa,ab,ac,sa,sb,sc,ktemp,kk
  142.   put (sa*cos(pi*ac/180))+(sqrt(((sa*cos(pi*ac/180))^2)-(sa^2)+(sc^2))) into sb
  143.   put (sa*cos(pi*ac/180))-(sqrt(((sa*cos(pi*ac/180))^2)-(sa^2)+(sc^2))) into ktemp
  144.   if ktemp > 0 then put 1 into kk
  145. end sbac
  146. on sbaa -- find sb from sides sc,sa and angle aa (2 Solutions)
  147.   global aa,ab,ac,sa,sb,sc,ktemp,kk
  148.   put (sc*cos(pi*aa/180))+(sqrt(((sc*cos(pi*aa/180))^2)-(sc^2)+(sa^2))) into sb
  149.   put (sc*cos(pi*aa/180))-(sqrt(((sc*cos(pi*aa/180))^2)-(sc^2)+(sa^2))) into ktemp
  150.   if ktemp > 0 then put 1 into kk
  151. end sbaa
  152. on scab -- find sc from sides sa,sb and angle ab (2 Solutions)
  153.   global aa,ab,ac,sa,sb,sc,ktemp,kk
  154.   put (sa*cos(pi*ab/180))+(sqrt(((sa*cos(pi*ab/180))^2)-(sa^2)+(sb^2))) into sc
  155.   put (sa*cos(pi*ab/180))-(sqrt(((sa*cos(pi*ab/180))^2)-(sa^2)+(sb^2))) into ktemp
  156.   if ktemp > 0 then put 1 into kk
  157. end scab
  158. on saac -- find sa from sides sb,sc and angle ac (2 Solutions)
  159.   global aa,ab,ac,sa,sb,sc,ktemp,kk
  160.   put (sb*cos(pi*ac/180))+(sqrt(((sb*cos(pi*ac/180))^2)-(sb^2)+(sc^2))) into sa
  161.   put (sb*cos(pi*ac/180))-(sqrt(((sb*cos(pi*ac/180))^2)-(sb^2)+(sc^2))) into ktemp
  162.   if ktemp > 0 then put 1 into kk
  163. end saac
  164.  
  165. on storemain
  166.   global aa,ab,ac,sa,sb,sc
  167.   set numberformat to "0.0000"
  168.   put aa into line 1 of card field 9
  169.   put ab into line 2 of card field 9
  170.   put ac into line 3 of card field 9
  171.   put sa into line 4 of card field 9
  172.   put sb into line 5 of card field 9
  173.   put sc into line 6 of card field 9
  174. end storemain
  175. on storesolution
  176.   global aa,ab,ac,sa,sb,sc
  177.   set numberformat to "0.0000"
  178.   put aa into line 7 of card field 9
  179.   put ab into line 8 of card field 9
  180.   put ac into line 9 of card field 9
  181.   put sa into line 10 of card field 9
  182.   put sb into line 11 of card field 9
  183.   put sc into line 12 of card field 9
  184. end storesolution
  185. on retrieve
  186.   global aa,ab,ac,sa,sb,sc,kaa,kab,kac,ksa,ksb,ksc
  187.   put line 1 of card field 9 into aa
  188.   put line 2 of card field 9 into ab
  189.   put line 3 of card field 9 into ac
  190.   put line 4 of card field 9 into sa
  191.   put line 5 of card field 9 into sb
  192.   put line 6 of card field 9 into sc
  193.   put line 7 of card field 9 into kaa
  194.   put line 8 of card field 9 into kab
  195.   put line 9 of card field 9 into kac
  196.   put line 10 of card field 9 into ksa
  197.   put line 11 of card field 9 into ksb
  198.   put line 12 of card field 9 into ksc
  199. end retrieve
  200.  
  201.  
  202. on calculate
  203.   global cc,ii,aa,ab,ac,sa,sb,sc,ktemp,kk,kaa,kab,kac,ksa,ksb,ksc,max
  204.   put 0 into ff
  205.   put 0 into kk
  206.   put 0 into gg
  207.   put 0 into kmax
  208.   put empty into card field 12
  209.   put empty into card field 7
  210.   put empty into card field 8
  211.   -- 3 angles
  212.   -----------
  213.   if ii=2 and sa>0 and ff=0 then
  214.     sbsa
  215.     scsa
  216.     put 1 into ff
  217.   end if
  218.   if ii=2 and sb>0 and ff=0 then
  219.     sasb
  220.     scsb
  221.     put 1 into ff
  222.   end if
  223.   if ii=2 and sc>0 and ff=0 then
  224.     sbsc
  225.     sasc
  226.     put 1 into ff
  227.   end if
  228.   if ii=2 and ff=0 then
  229.     put 1 into sa
  230.     sbsa
  231.     scsa
  232.     put 1 into gg
  233.     put 1 into ff
  234.   end if
  235.  
  236.   -- 3 sides
  237.   -----------
  238.   if (sa>0 and sb>0 and sc>0 and ff=0) or cc=3 then
  239.     aasides
  240.     absides
  241.     put 180-aa-ab into ac
  242.     put 1 into ff
  243.   end if
  244.  
  245.   -- 1 angle between 2 sides
  246.   ----------------------------
  247.   if aa>0 and sb>0 and sc>0 and ff=0 then
  248.     saaa
  249.     absides
  250.     put 180-aa-ab into ac
  251.     put 1 into ff
  252.   end if
  253.   if ab>0 and sa>0 and sc>0 and ff=0 then
  254.     sbab
  255.     aasides
  256.     put 180-aa-ab into ac
  257.     put 1 into ff
  258.   end if
  259.   if ac>0 and sa>0 and sb>0 and ff=0 then
  260.     scac
  261.     aasides
  262.     put 180-aa-ac into ab
  263.     put 1 into ff
  264.   end if
  265.  
  266.   -- 1 angle not between 2 sides (sides are counterclockwise from angle)
  267.   ----------------------------------------------------------------------
  268.   if aa>0 and sb>0 and sa>0 and ff=0 then
  269.     scaa
  270.     absides
  271.     put 180-aa-ab into ac
  272.     if kk=1 then
  273.       storemain
  274.       put ktemp into sc
  275.       absides
  276.       put 180-aa-ab into ac
  277.       storesolution
  278.       retrieve
  279.       put empty into card field 9
  280.     end if
  281.     put 1 into ff
  282.   end if
  283.   if ab>0 and sc>0 and sb>0 and ff=0 then
  284.     saab
  285.     acsides
  286.     put 180-ab-ac into aa
  287.     if kk=1 then
  288.       storemain
  289.       put ktemp into sa
  290.       acsides
  291.       put 180-ab-ac into aa
  292.       storesolution
  293.       retrieve
  294.       put empty into card field 9
  295.     end if
  296.     put 1 into ff
  297.   end if
  298.   if ac>0 and sa>0 and sc>0 and ff=0 then
  299.     sbac
  300.     aasides
  301.     put 180-ac-aa into ab
  302.     if kk=1 then
  303.       storemain
  304.       put ktemp into sb
  305.       aasides
  306.       put 180-ac-aa into ab
  307.       storesolution
  308.       retrieve
  309.       put empty into card field 9
  310.     end if
  311.     put 1 into ff
  312.   end if
  313.  
  314.   -- 1 angle not between 2 sides (sides are clockwise from angle)
  315.   ----------------------------------------------------------------
  316.   if aa>0 and sa>0 and sc>0 and ff=0 then
  317.     sbaa
  318.     absides
  319.     put 180-aa-ab into ac
  320.     if kk=1 then
  321.       storemain
  322.       put ktemp into sb
  323.       absides
  324.       put 180-aa-ab into ac
  325.       storesolution
  326.       retrieve
  327.       put empty into card field 9
  328.     end if
  329.     put 1 into ff
  330.   end if
  331.   if ab>0 and sb>0 and sa>0 and ff=0 then
  332.     scab
  333.     acsides
  334.     put 180-ab-ac into aa
  335.     if kk=1 then
  336.       storemain
  337.       put ktemp into sc
  338.       acsides
  339.       put 180-ab-ac into aa
  340.       storesolution
  341.       retrieve
  342.       put empty into card field 9
  343.     end if
  344.     put 1 into ff
  345.   end if
  346.   if ac>0 and sc>0 and sb>0 and ff=0 then
  347.     saac
  348.     aasides
  349.     put 180-ac-aa into ab
  350.     if kk=1 then
  351.       storemain
  352.       put ktemp into sa
  353.       aasides
  354.       put 180-ac-aa into ab
  355.       storesolution
  356.       retrieve
  357.       put empty into card field 9
  358.     end if
  359.     put 1 into ff
  360.   end if
  361.  
  362.  
  363.   --*****--- results
  364.   -------------------
  365.   if offset("N",sa&sb&sc&aa&ab&ac)<>0 or min(sa,sb,sc,aa,ab,ac)<0 then
  366.     play "boing"
  367.     put "Error... These values do not give a real solution"
  368.     wait 80
  369.     hide message box
  370.     exit calculate
  371.   end if
  372.  
  373.   put (sa+sb+sc)/2 into s
  374.   put sqrt(s*(s-sa)*(s-sb)*(s-sc)) into area
  375.   set numberformat to "0.0000"
  376.   put "angle A=" into line 2 of card field 12
  377.   put 1*aa&"¬∞" into line 2 of card field 7
  378.   put "angle B=" into line 3 of card field 12
  379.   put 1*ab&"¬∞" into line 3 of card field 7
  380.   put "angle C=" into line 4 of card field 12
  381.   put 1*ac&"¬∞" into line 4 of card field 7
  382.   if gg=0 then
  383.     put "side AB=" into line 6 of card field 12
  384.     put 1*sc into line 6 of card field 7
  385.     put "side BC=" into line 7 of card field 12
  386.     put 1*sa into line 7 of card field 7
  387.     put "side CA=" into line 8 of card field 12
  388.     put 1*sb into line 8 of card field 7
  389.     put "Area    =" into line 10 of card field 12
  390.     put area into line 10 of card field 7
  391.   end if
  392.   if aa=90 or ab=90 or ac=90 then put 0 into kk
  393.   if kk=1 then
  394.     put "Solution 1" into line 1 of card field 7
  395.     put "Solution 2" into line 1 of card field 8
  396.     put 1*kaa into line 2 of card field 8
  397.     put 1*kab into line 3 of card field 8
  398.     put 1*kac into line 4 of card field 8
  399.     put 1*ksc into line 6 of card field 8
  400.     put 1*ksa into line 7 of card field 8
  401.     put 1*ksb into line 8 of card field 8
  402.     put (ksa+ksb+ksc)/2 into ks
  403.     put sqrt(ks*(ks-ksa)*(ks-ksb)*(ks-ksc)) into line 10 of card field 8
  404.   end if
  405.   if offset("N",sa&sb&sc&aa&ab&ac)<>0 or min(sa,sb,sc,aa,ab,ac)<0 then
  406.     play "boing"
  407.     put "Error... These values do not give a real solution"
  408.     wait 80
  409.     hide message box
  410.     exit calculate
  411.   end if
  412.  
  413.   ----
  414.   put 210 into scale
  415.   put sc into maxh
  416.   if aa>90 then put sc+(sb*cos(pi*(180-aa)/180)) into maxh
  417.   if ab>90 then put sc+(sa*cos(pi*(180-ab)/180)) into maxh
  418.   put sa*sin(pi*ab/180) into maxv
  419.   if ab>90 then put sa*sin(pi*(180-ab)/180) into maxv
  420.   if maxh>=maxv then put maxh into max
  421.   if maxv>maxh then put maxv into max
  422.   put scale/max into ratio
  423.   put round(ratio*maxh) into maxh
  424.   put round(ratio*maxv) into maxv
  425.   put round(sa*ratio) into rsa
  426.   put round(sb*ratio) into rsb
  427.   put round(sc*ratio) into rsc
  428.   put 35 into Bh
  429.   if ab>90 then put round(30+maxh-rsc) into Bh
  430.   put 285 into Bv
  431.   put Bh+rsc into Ah
  432.   put 285 into Av
  433.   put round(Bh+rsc-rsb*cos(pi*aa/180)) into Ch
  434.   put round(Av-rsb*sin(pi*aa/180)) into Cv
  435.   Choose select tool
  436.   Drag from 17,50 to 253,302
  437.   domenu clear picture
  438.   choose line tool
  439.   set linesize to 2
  440.   drag from Bh,Bv to Ah,Av
  441.   drag from Ah,Av to Ch,Cv
  442.   drag from Ch,Cv to Bh,Bv
  443.   if kk<>0 then
  444.     set linesize to 1
  445.     if card field 4>0 and sc>ksc then
  446.       put Ah-round((ksc/sc)*(Ah-Bh)) into temph
  447.       put Av into tempv
  448.       drag from temph,tempv to Ch,Cv
  449.       subtract 4 from tempv
  450.       add 1 to temph
  451.     end if
  452.     if card field 5>0 and sa>ksa then
  453.       add 1 to kk
  454.       put sqrt(((Ch-Bh)^2)+((Cv-Bv)^2))*ksa/sa into temp
  455.       put Bh+round(temp*cos(pi*ab/180)) into temph
  456.       put Bv-round(temp*sin(pi*ab/180)) into tempv
  457.       drag from temph,tempv to Ah,Av
  458.       subtract 5 from temph
  459.       add 13 to tempv
  460.     end if
  461.     if card field 6>0 and sb>ksb then
  462.       add 2 to kk
  463.       put (sqrt(((Ch-Ah)^2)+((Cv-Av)^2))*ksb/sb) into temp
  464.       put Ch+round(temp*cos(pi*aa/180)) into temph
  465.       put Cv+round(temp*sin(pi*aa/180)) into tempv
  466.       drag from temph,tempv to Bh,Bv
  467.       add 16 to tempv
  468.       add 6 to temph
  469.     end if
  470.     if card field 4>0 and sb>ksb then
  471.       add 3 to kk
  472.       put (sqrt(((Ch-Ah)^2)+((Cv-Av)^2))*(1-(ksb/sb))) into temp
  473.       put Ch+round(temp*cos(pi*aa/180)) into temph
  474.       put Cv+round(temp*sin(pi*aa/180)) into tempv
  475.       drag from temph,tempv to Bh,Bv
  476.       add 13 to tempv
  477.       subtract 3 from temph
  478.     end if
  479.     if card field 5>0 and sc>ksc then
  480.       add 4 to kk
  481.       put Bh+round((ksc/sc)*(Ah-Bh)) into temph
  482.       put Av into tempv
  483.       drag from temph,tempv to Ch,Cv
  484.       subtract 4 from tempv
  485.       subtract 10 from temph
  486.  
  487.     end if
  488.     if card field 6>0 and sa>ksa then
  489.       add 5 to kk
  490.       put (sqrt(((Ch-Bh)^2)+((Cv-Bv)^2))*(1-(ksa/sa))) into temp
  491.       put  Bh+round(temp*cos(pi*ab/180)) into temph
  492.       put Bv-round(temp*sin(pi*ab/180)) into tempv
  493.       drag from temph,tempv to Ah,Av
  494.       add 14 to tempv
  495.       subtract 2 from temph
  496.     end if
  497.   end if
  498.   Choose text tool
  499.   set textfont to chicago
  500.   set textsize to 12
  501.   click at Bh-15,Bv+15
  502.   Type "B¬∞"
  503.   click at Ah-10,Av+15
  504.   type "A¬∞"
  505.   click at Ch-7,Cv-5
  506.   type "C¬∞"
  507.   click at 0,0
  508.   if kk<>0 then
  509.     set textfont to geneva
  510.     set textsize to 9
  511.     click at temph,tempv
  512.     if kk=1 or kk=6 then type "B¬∞"
  513.     if kk=2 or kk=4 then type "C¬∞"
  514.     if kk=3 or kk=5 then type "A¬∞"
  515.   end if
  516.   choose browse tool
  517.   set cursor to 1
  518. end calculate
  519.  
  520.  
  521. on reset
  522.   repeat with x=1 to 6
  523.     put empty into card field x
  524.   end repeat
  525. end reset
  526.  
  527.  
  528.